// 封装基地址 axios的拦截器
import axios from 'axios'
import { removeToken, getToken, setToken } from './token'
import router from './../router'
import JSONBig from 'json-bigint'
import { getNewToken } from '../api/login.js'

// 1.基地址
const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL1,
  transformResponse: [
    function (data) {
      try {
        return JSONBig.parse(data)
      } catch (err) {
        return data
      }
      // axios 默认会在内部这样来处理后端返回的数据
      // return JSON.parse(data)
    }
  ]
})

// 设置axios的拦截器
// 1.请求拦截器
request.interceptors.request.use(
  function (config) {
    // console.log('请求拦截器', config) // 打印config对象
    // 1.判断此请求是否需要yoken
    if (config.needToken) {
      //  1)需要则获取token
      const token = getToken('token')

      // 2.判断token是否被拿到了
      if (token) {
        // 1)拿到了则进行下一步,给token添加到请求头中,添加token
        config.headers.Authorization = `Bearer ${token}`
        return config
      } else {
        // 2)没拿到则退回去登录页面进行登录,删除token,跳回登录页
        removeToken()
        router.push('/login')
        return config
      }
    } else {
      //  2)不需要则直接放行
      return config
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 2.响应拦截器
request.interceptors.response.use(
  res => {
    console.log('响应拦截器', res) // 打印res对象
    return res
  },
  async error => {
    console.log('aaa' + error)
    if (error.toString().includes('401')) {
      const res = await getNewToken()
      console.log(res)
      setToken(res.data.token)
    }
    return Promise.reject(error)
  }
)

export default request
